//
// testing main for darray
//

#include <stdio.h>
#include <stdlib.h>
#include "darray.h"

void test_add(darray da, int index, int value);
void test_remove(darray da, int index);
static void test_print_cb(void *data);
static int test_add1_cb(void *data, void *context);

int
main(int argc, char *argv[])
{
    printf("hello world\n");
    darray da = da_create();

    // add 
    int i;
    for (i = 0; i < 100; i++) {
        test_add(da, i, i);
    }

    // print all
    da_print(da, test_print_cb);

    // change size
    da_change_size(da, 200);
    da_print(da, test_print_cb);

    // add 1 to every data
    da_foreach(da, test_add1_cb, NULL);
    da_print(da, test_print_cb);

    // remove
    for (i = 0; i < 100; i++) {
        test_remove(da, i);
    }

    da_destroy(da);
    return 0;
}

void test_add(darray da, int index, int value)
{
    int *vp = (int *)malloc(sizeof(int));
    *vp = value;
    if (da_add(da, index, vp) == NULL) {
        printf("main: add failed\n");
    }
}

void test_remove(darray da, int index)
{
    int *vp = (int *)da_remove(da, index);
    if (vp != NULL)
        free(vp);
}

void test_print_cb(void *data)
{
    if (data != NULL) {
        printf("data is %d\n", *(int *)data);
    }
    else {
        printf("no data found\n");
    }
}

int test_add1_cb(void *data, void *context)
{
    printf("test_add1_cb()\n");
    if (data != NULL) {
        int *pv = (int *)data;
	(*pv)++;
    } else {
      //        printf("no addable data found");
    }
}
